/*
 * ClinicaView.java
 */

package paciente;

import GestorUsuarios.IDException;
import java.awt.CardLayout;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.sql.SQLException;
import org.jdesktop.application.Action;
import org.jdesktop.application.SingleFrameApplication;
import org.jdesktop.application.FrameView;
import javax.swing.JDialog;
import javax.swing.JFrame;
import interfaces.*;
import javax.swing.JPanel;
import Controlador.*;
import GestorCitas.Cita;
import GestorCitas.Receta;
import GestorPruebas.Prueba;
import GestorUsuarios.Rol;
import GestorUsuarios.Usuario;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Calendar;
import javax.swing.ImageIcon;
import interfaces.verEntregas;
import java.awt.Dimension;
import java.text.ParseException;

/**
 * The application's main frame.
 */
public class PacienteView extends FrameView {

    private Interfaces actual;

    public PacienteView(SingleFrameApplication app) {
        super(app);

        initComponents();

        
        getFrame().setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        getFrame().addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                salir();
            }
        });
        // Cuando se produce un evento de redimensión del frame
        getFrame().addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentResized(java.awt.event.ComponentEvent evt) {
                 Interfaz.setSizeFrame(getFrame().getHeight());
                 // Actualizamos interfaces:
            }
        });



        this.getFrame().setIconImage((new ImageIcon(getClass().getResource("/paciente/resources/Hospital-Red-icon.png")).getImage()));
        this.getFrame().setTitle("Aplicación hospital");
        this.getFrame().setMinimumSize(new Dimension(800,600));

        paciente = new PrincipalPaciente(this);
        Ventana.add(paciente,"paciente");

        cambiar_pass = new cambiarPass(this);
        Ventana.add(cambiar_pass,"cambiarpass");

        cambiar_pass2 = new cambiarPass2(this);
        Ventana.add(cambiar_pass2,"cambiarpass2");

        ver_cita = new verCita(this);
        Ventana.add(ver_cita,"vercita");

        ver_datos = new verDatos(this);
        Ventana.add(ver_datos,"verdatos");

        ver_horario = new verHorario(this);
        Ventana.add(ver_horario,"verhorario");

        pedir_cita = new pedirCita(this);
        Ventana.add(pedir_cita,"pedircita");

        cancelar_cita = new cancelarCita(this);
        Ventana.add(cancelar_cita,"cancelarcita");

        mensaje_exito = new MensajeExito(this);
        Ventana.add(mensaje_exito,"exito");

        mensaje_error = new MensajeError(this);
        Ventana.add(mensaje_error,"error");

        ver_entregas = new verEntregas(this);
        Ventana.add(ver_entregas,"verEntregas");

        ver_recetas = new verReceta(this);
        Ventana.add(ver_recetas,"verReceta");

        ver_receta_detallado = new verRecetaDetallado(this);
        Ventana.add(ver_receta_detallado,"verRecetaDetallado");

        historialPaciente = new historialPaciente(this);
        Ventana.add(historialPaciente,"historialPaciente");

        historial_paciente_detallado = new historialPacienteDetallado(this);
        Ventana.add(historial_paciente_detallado,"historialPacienteDetallado");

        ver_resultados = new verResultados(this);
        Ventana.add(ver_resultados,"ver_resultados");
        
        ver_resultados_radiografia = new verResultadosRadiografia(this);
        Ventana.add(ver_resultados_radiografia,"ver_resultados_radiografia");
        
        errores  = new erroresEntrada(PacienteApp.getApplication().getMainFrame(), true);
        desconectar  = new mensajeDesconectar(PacienteApp.getApplication().getMainFrame(), true);
        ayuda = new Ayuda(PacienteApp.getApplication().getMainFrame(), true);
        contacto = new Contacto(PacienteApp.getApplication().getMainFrame(), true);
        
    }

    public JPanel getPanel() {
        return Ventana;
    }


    public void volver(Interfaces i) {
        switch(i) {
            case PRINCIPAL_PACIENTE:
                abrirPrincipalPaciente();
                actual = Interfaces.PRINCIPAL_PACIENTE;
                break;
            case VER_RECETAS:
                ( (CardLayout)Ventana.getLayout() ).show( Ventana,"verReceta");
                titulo.setText("Ver Receta");
                actual = Interfaces.VER_RECETAS;
                break;
            case HISTORIAL_PACIENTE:
                ( (CardLayout)Ventana.getLayout() ).show(Ventana,"historialPaciente" );
                titulo.setText("Mi Historial");
                actual = Interfaces.HISTORIAL_PACIENTE;
                break;
            case HISTORIAL_PACIENTE_DETALLADO:
                ( (CardLayout)Ventana.getLayout() ).show(Ventana,"historialPacienteDetallado" );
                titulo.setText("Cita detallada");
                actual = Interfaces.HISTORIAL_PACIENTE_DETALLADO;
                break;
            case VER_RESULTADOS_RADIOGRAFIA:
                ( (CardLayout)Ventana.getLayout() ).show(Ventana,"ver_resultados_radiografia" );
                titulo.setText("Ver resultados prueba");
                actual = Interfaces.VER_RESULTADOS_RADIOGRAFIA;
                break;
            case VER_RESULTADOS:
                ( (CardLayout)Ventana.getLayout() ).show(Ventana,"ver_resultados" );
                titulo.setText("Ver resultados prueba");
                actual = Interfaces.VER_RESULTADOS;
                break;
            default:
                break;

        }

    }

    public void setTitulo(String titu) {
        titulo.setText(titu);
    }


    public void limpiaErrores() {
        errores.limpiaErrores();
    }

    public void addError(String s) {
        errores.addError(s);
    }

    public void muestraListaErrores() {
        errores.setVisible(true);
    }

    public void abrirPrincipalPaciente() {
        ( (CardLayout)Ventana.getLayout() ).show( Ventana,"paciente" );
        titulo.setText("Menú paciente");
        actual = Interfaces.PRINCIPAL_PACIENTE;
    }

    public void abrirPrincipalMedico() {
        ( (CardLayout)Ventana.getLayout() ).show( Ventana,"medico" );
        titulo.setText("Menú médico");
        actual = Interfaces.PRINCIPAL_MEDICO;
    }

    public void abrirVerMiHorario() throws SQLException, IOException, ClassNotFoundException, NoSuchAlgorithmException {
        ( (CardLayout)Ventana.getLayout() ).show( Ventana,"verhorario" );
        ver_horario.rellenaDatos(Controlador.getUsuarioActivo(),actual);
        titulo.setText("Ver mi horario");
    }


    public void abrirVerDatos(Usuario us) throws SQLException, IOException, ClassNotFoundException {
        ( (CardLayout)Ventana.getLayout() ).show( Ventana,"verdatos" );
        ver_datos.rellenaDatos(us,actual);
        titulo.setText("Ver datos");
        actual = Interfaces.VER_DATOS;
    }

    public void abrirCambiarPass() {
        ( (CardLayout)Ventana.getLayout() ).show( Ventana,"cambiarpass" );
        cambiar_pass.rellenaDatos(Controlador.getUsuarioActivo(),actual);
        titulo.setText("Cambiar mi contraseña");
        actual = Interfaces.CAMBIAR_PASS;
    }

    public void abrirCambiarPass2(String p, Interfaces i) {
        ( (CardLayout)Ventana.getLayout() ).show( Ventana,"cambiarpass2" );
        cambiar_pass2.rellenaDatos(Controlador.getUsuarioActivo(),p,i);
        titulo.setText("Cambiar mi contraseña");
        actual = Interfaces.CAMBIAR_PASS_2;
    }

    public void abrirPedirCita(Interfaces ant) {
        ( (CardLayout)Ventana.getLayout() ).show( Ventana,"pedircita" );
        pedir_cita.rellenaDatos(actual, Controlador.getUsuarioActivo());
        titulo.setText("Pedir cita");
        actual = Interfaces.PEDIR_CITA;
    }

    public void abrirVerCita(Cita c) throws SQLException, IOException, ClassNotFoundException, NoSuchAlgorithmException {
        ( (CardLayout)Ventana.getLayout() ).show( Ventana,"vercita" );
        ver_cita.rellenaDatos(actual, c);
        titulo.setText("Ver cita");
        actual = Interfaces.CONSULTAR_CITA;
    }

    public void abrirCancelarCita(Cita c) throws SQLException, IOException, ClassNotFoundException, NoSuchAlgorithmException {
        ( (CardLayout)Ventana.getLayout() ).show( Ventana,"cancelarcita" );
        cancelar_cita.rellenaDatos(actual, c);
        titulo.setText("Cancelar cita");
        actual = Interfaces.CANCELAR_CITA;
    }

    public void abrirMensajeExito(String mensaje, Interfaces anterior) {
        ( (CardLayout)Ventana.getLayout() ).show( Ventana,"exito" );
        mensaje_exito.setMensaje(mensaje, anterior);
        titulo.setText("Éxito en la operación");
    }

    public void abrirMensajeError(String mensaje, Interfaces anterior) {
        ( (CardLayout)Ventana.getLayout() ).show( Ventana,"error" );
        mensaje_error.setMensaje(mensaje, anterior);
        titulo.setText("Fracaso en la operación");
    }

    public void abrirVerEntregas(Integer id_paciente) throws SQLException, IOException, ClassNotFoundException, ParseException {
        ( (CardLayout)Ventana.getLayout() ).show( Ventana,"verEntregas" );
        ver_entregas.rellenaDatos(id_paciente, actual);
        titulo.setText("Entregas pendientes");
        actual = Interfaces.VER_ENTREGA;
    }

    public void abrirVerRecetas(Integer id_paciente, Interfaces anterior) throws SQLException, IOException, ClassNotFoundException, NoSuchAlgorithmException, ParseException {
    ( (CardLayout)Ventana.getLayout() ).show(Ventana,"verReceta" );
        ver_recetas.rellenaDatos(id_paciente , anterior);
        titulo.setText("Ver Recetas");
        actual = Interfaces.VER_RECETAS;
    }

    public void abrirVerRecetasDetallado(Receta receta, Interfaces anterior) throws SQLException, IOException, ClassNotFoundException, NoSuchAlgorithmException, ParseException {
    ( (CardLayout)Ventana.getLayout() ).show(Ventana,"verRecetaDetallado" );
        ver_receta_detallado.rellenaDatos(receta);
        titulo.setText("Ver Recetas Detallado");
    }
     public void abrirHistorialPaciente() throws SQLException, IOException, ClassNotFoundException, NoSuchAlgorithmException, ParseException {
    ( (CardLayout)Ventana.getLayout() ).show(Ventana,"historialPaciente" );
        historialPaciente.rellenaDatos();
        titulo.setText("Mi Historial");
        actual = Interfaces.HISTORIAL_PACIENTE;
    }

     public void abrirHistorialPacienteDetallado( Cita c , Interfaces anterior) throws SQLException, IOException, ClassNotFoundException, NoSuchAlgorithmException, ParseException, IDException {
    ( (CardLayout)Ventana.getLayout() ).show(Ventana,"historialPacienteDetallado" );
        historial_paciente_detallado.rellenaDatos(c,anterior);
        titulo.setText("Cita detallada");
        actual = Interfaces.HISTORIAL_PACIENTE_DETALLADO;
    }

     public void abrirVerResultados( Prueba p , Interfaces anterior) throws SQLException, IOException, ClassNotFoundException, NoSuchAlgorithmException, ParseException, IDException {
    ( (CardLayout)Ventana.getLayout() ).show(Ventana,"ver_resultados" );
        ver_resultados.rellenaDatos(p,anterior);
        titulo.setText("Ver resultados prueba");
        actual = Interfaces.VER_RESULTADOS;
    }

     public void abrirVerResultadosRadiografia ( Prueba p , Interfaces anterior) throws SQLException, IOException, ClassNotFoundException, NoSuchAlgorithmException, ParseException, IDException {
    ( (CardLayout)Ventana.getLayout() ).show(Ventana,"ver_resultados_radiografia" );
        ver_resultados_radiografia.rellenaDatos(p,anterior);
        titulo.setText("Ver resultados prueba");
        actual = Interfaces.VER_RESULTADOS_RADIOGRAFIA;
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        mainPanel = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jPanel6 = new javax.swing.JPanel();
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        titulo = new javax.swing.JLabel();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jButton1 = new javax.swing.JButton();
        Ventana = new javax.swing.JPanel();

        mainPanel.setName("mainPanel"); // NOI18N
        mainPanel.setPreferredSize(new java.awt.Dimension(800, 600));
        mainPanel.setLayout(new java.awt.GridLayout(1, 0));

        jScrollPane1.setMinimumSize(new java.awt.Dimension(800, 600));
        jScrollPane1.setName("jScrollPane1"); // NOI18N
        jScrollPane1.setPreferredSize(new java.awt.Dimension(800, 600));

        jPanel6.setMinimumSize(new java.awt.Dimension(800, 600));
        jPanel6.setName("jPanel6"); // NOI18N
        jPanel6.setPreferredSize(new java.awt.Dimension(800, 600));
        jPanel6.setRequestFocusEnabled(false);

        jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jPanel1.setMinimumSize(new java.awt.Dimension(780, 100));
        jPanel1.setName("jPanel1"); // NOI18N
        jPanel1.setPreferredSize(new java.awt.Dimension(780, 100));

        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(paciente.PacienteApp.class).getContext().getResourceMap(PacienteView.class);
        jLabel1.setIcon(resourceMap.getIcon("jLabel1.icon")); // NOI18N
        jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N
        jLabel1.setName("jLabel1"); // NOI18N

        titulo.setFont(resourceMap.getFont("titulo.font")); // NOI18N
        titulo.setText(resourceMap.getString("titulo.text")); // NOI18N
        titulo.setName("titulo"); // NOI18N

        javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(paciente.PacienteApp.class).getContext().getActionMap(PacienteView.class, this);
        jButton3.setAction(actionMap.get("salir")); // NOI18N
        jButton3.setIcon(resourceMap.getIcon("jButton3.icon")); // NOI18N
        jButton3.setText(resourceMap.getString("jButton3.text")); // NOI18N
        jButton3.setName("jButton3"); // NOI18N

        jButton4.setAction(actionMap.get("abrirAyuda")); // NOI18N
        jButton4.setIcon(resourceMap.getIcon("jButton4.icon")); // NOI18N
        jButton4.setText(resourceMap.getString("jButton4.text")); // NOI18N
        jButton4.setName("jButton4"); // NOI18N

        jButton1.setAction(actionMap.get("verContacto")); // NOI18N
        jButton1.setIcon(resourceMap.getIcon("jButton1.icon")); // NOI18N
        jButton1.setText(resourceMap.getString("jButton1.text")); // NOI18N
        jButton1.setName("jButton1"); // NOI18N

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addGap(18, 18, 18)
                .addComponent(titulo, javax.swing.GroupLayout.DEFAULT_SIZE, 374, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton1)
                .addGap(5, 5, 5)
                .addComponent(jButton4)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton3)
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jButton1)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addComponent(titulo, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 73, Short.MAX_VALUE)
                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addComponent(jButton4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jButton3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
                .addContainerGap(12, Short.MAX_VALUE))
        );

        Ventana.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        Ventana.setMinimumSize(new java.awt.Dimension(780, 472));
        Ventana.setName("Ventana"); // NOI18N
        Ventana.setPreferredSize(new java.awt.Dimension(780, 472));
        Ventana.setLayout(new java.awt.CardLayout());

        javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
        jPanel6.setLayout(jPanel6Layout);
        jPanel6Layout.setHorizontalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel6Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 786, Short.MAX_VALUE)
                    .addComponent(Ventana, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 786, Short.MAX_VALUE))
                .addContainerGap())
        );
        jPanel6Layout.setVerticalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel6Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(Ventana, javax.swing.GroupLayout.DEFAULT_SIZE, 476, Short.MAX_VALUE)
                .addContainerGap())
        );

        jScrollPane1.setViewportView(jPanel6);

        mainPanel.add(jScrollPane1);

        setComponent(mainPanel);
    }// </editor-fold>//GEN-END:initComponents

    @Action
    public void salir() {
        desconectar.setVisible(true);
    }

    @Action
    public void abrirAyuda() {
         switch(actual) {
            case PRINCIPAL_PACIENTE:
                ayuda.setAyuda("principalpaciente.html");
                break;
            case VER_DATOS:
                ayuda.setAyuda("ver_datos.html");
            break;
            case CAMBIAR_PASS:
                ayuda.setAyuda("cambiar_contraseña.html");
            break;
            case CAMBIAR_PASS_2:
                ayuda.setAyuda("confirmacion_cambio_contraseña.html");
            break;
            case PEDIR_CITA:
                ayuda.setAyuda("pedirCita.html");
            break;
            case CONSULTAR_CITA:
                ayuda.setAyuda("consultarCita.html");
            break;
            case CANCELAR_CITA:
                ayuda.setAyuda("cancelarCita.html");
            break;
            default:
                ayuda.setAyuda("no_rellenada.html");
            break;
        }
         
     ayuda.setVisible(true);

    }

    @Action
    public void verContacto() {
        contacto.setVisible(true);
    }



    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JPanel Ventana;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel6;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JPanel mainPanel;
    private javax.swing.JLabel titulo;
    // End of variables declaration//GEN-END:variables

    private Contacto contacto;
    private MensajeExito mensaje_exito;
    private MensajeError mensaje_error;
    private PrincipalPaciente paciente;
    private verDatos ver_datos;
    private verHorario ver_horario;
    private cambiarPass cambiar_pass;
    private cambiarPass2 cambiar_pass2;
    private pedirCita pedir_cita;
    private JDialog aboutBox;
    private erroresEntrada errores;
    private Ayuda ayuda;
    private mensajeDesconectar desconectar;
    private verEntregas ver_entregas;
    private verCita ver_cita;
    private cancelarCita cancelar_cita;
    private verReceta ver_recetas;
    private verRecetaDetallado ver_receta_detallado;
    private historialPaciente historialPaciente;
    private historialPacienteDetallado historial_paciente_detallado;
    private verResultados ver_resultados;
    private verResultadosRadiografia ver_resultados_radiografia;
}
